package com.sojson.util.encrypt.oneway.alike.sha1;

import org.apache.commons.codec.digest.DigestUtils;

import com.sojson.util.StringUtil;
import com.sojson.util.encrypt.EncryptUtil;

/**
 * SHA1单向加密工具类
 * 
 * @author liu
 * @date 2020-09-04
 */
public class Sha1Util {

    /**
     * 加密
     * 
     * @param data
     * @return
     */
    public static String encrypt(String data) {
        return DigestUtils.sha1Hex(data);
    }

    /**
     * 加密
     * 
     * @param data
     * @return
     */
    public static byte[] encrypt(byte[] data) {
        return DigestUtils.sha1Hex(data).getBytes();
    }

    /**
     * 加密
     * 
     * @param data
     * @return
     */
    public static byte[] encryptToByte(String data) {
        return encrypt(data.getBytes());
    }

    /**
     * 加密
     * 
     * @param data
     * @return
     */
    public static String encryptToStr(byte[] data) {
        return encrypt(new String(data));
    }

    /**
     * 加密
     * 
     * @param data  内容
     * @param key   密钥
     * @return
     */
    public static String encrypt(String data, String key) {
        return encryptToStr(data.getBytes(), key);
    }

    /**
     * 加密
     * 
     * @param data  内容
     * @param key   密钥
     * @return
     */
    public static byte[] encrypt(byte[] data, String key) {
        if (StringUtil.isNotBlankObject(key)) {
            data = EncryptUtil.keyEncrypt(data, key);
        }

        return encrypt(data);
    }

    /**
     * 加密
     * 
     * @param data  内容
     * @param key   密钥
     * @return
     */
    public static byte[] encryptToByte(String data, String key) {
        return encrypt(data.getBytes(), key);
    }

    /**
     * 加密
     * 
     * @param data  内容
     * @param key   密钥
     * @return
     */
    public static String encryptToStr(byte[] data, String key) {
        if (StringUtil.isNotBlankObject(key)) {
            data = EncryptUtil.keyEncrypt(data, key);
        }

        return encryptToStr(data);
    }

    /**
     * 加密并转为大写
     * 
     * @param data
     * @return
     */
    public static String encryptToUpperCase(String data) {
        return encrypt(data).toUpperCase();
    }

    /**
     * 加密并转为大写
     * 
     * @param data
     * @return
     */
    public static String encryptToUpperCase(byte[] data) {
        return encryptToStr(data).toUpperCase();
    }

    /**
     * 加密并转为大写
     * 
     * @param data  内容
     * @param key   密钥
     * @return
     */
    public static String encryptToUpperCase(String data, String key) {
        return encrypt(data, key).toUpperCase();
    }

    /**
     * 加密并转为大写
     * 
     * @param data  内容
     * @param key   密钥
     * @return
     */
    public static String encryptToUpperCase(byte[] data, String key) {
        return encryptToStr(data, key).toUpperCase();
    }

}